# OpenMV串口通信示例
import pyb
import time

# 初始化UART - 使用UART3(P4=TX, P5=RX)或根据您的OpenMV型号选择合适的UART
uart = pyb.UART(3, 115200, timeout_char=1000)

# 初始化LED用于指示
red_led = pyb.LED(1)
green_led = pyb.LED(2)

# 清空缓冲区
uart.read()

def bytes_to_hex_string(data):
    """将字节数据转换为十六进制字符串表示"""
    return ' '.join(['%02X' % b for b in data])

def main():
    print("OpenMV UART通信测试，等待STM32发送数据...")

    while True:
        # 检查是否有数据可读
        if uart.any():
            # 读取数据
            data = uart.read()
            if data:
                # 收到数据，绿灯闪烁
                green_led.on()

                # 打印原始数据
                print("收到数据(原始):", data)

                # 将数据转换为十六进制字符串显示
                hex_str = bytes_to_hex_string(data)
                print("收到数据(十六进制):", hex_str)

                # 尝试将数据解析为ASCII字符串(忽略非ASCII字符)
                ascii_str = ""
                for byte in data:
                    if 32 <= byte <= 126:  # 可打印ASCII字符范围
                        ascii_str += chr(byte)
                    else:
                        ascii_str += "."  # 用点替代不可打印字符

                print("收到数据(ASCII):", ascii_str)

                # 回复数据给STM32
                response = "Received: " + hex_str
                uart.write(response.encode('ascii'))

                time.sleep_ms(100)
                green_led.off()
            else:
                # 没有收到数据，红灯闪烁
                red_led.on()
                time.sleep_ms(100)
                red_led.off()

        time.sleep_ms(100)

# 开始执行
if __name__ == "__main__":
    main()
